Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


android/app/src/main/java/org/able/BLE.java e0f1f99cd1c208c5008a936230c38e448dddd45d (e0f1f99c) Text, 12.98 KB

Tff7b72package T7ee787org.ableTb4b4b4;

Tff7b72import T7ee787android.ManifestTb4b4b4;
Tff7b72import T7ee787android.annotation.SuppressLintTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothAdapterTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothDeviceTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothGattTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothGattCallbackTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothGattCharacteristicTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothGattDescriptorTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothGattServiceTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothManagerTb4b4b4;
Tff7b72import T7ee787android.bluetooth.BluetoothProfileTb4b4b4;
Tff7b72import T7ee787android.bluetooth.le.BluetoothLeScannerTb4b4b4;
Tff7b72import T7ee787android.bluetooth.le.ScanCallbackTb4b4b4;
Tff7b72import T7ee787android.bluetooth.le.ScanFilterTb4b4b4;
Tff7b72import T7ee787android.bluetooth.le.ScanResultTb4b4b4;
Tff7b72import T7ee787android.bluetooth.le.ScanSettingsTb4b4b4;
Tff7b72import T7ee787android.content.BroadcastReceiverTb4b4b4;
Tff7b72import T7ee787android.content.ContextTb4b4b4;
Tff7b72import T7ee787android.content.IntentTb4b4b4;
Tff7b72import T7ee787android.content.IntentFilterTb4b4b4;
Tff7b72import T7ee787android.content.pm.PackageManagerTb4b4b4;
Tff7b72import T7ee787android.os.BuildTb4b4b4;
Tff7b72import T7ee787android.util.LogTb4b4b4;

Tff7b72import T7ee787androidx.core.content.ContextCompatTb4b4b4;

Tff7b72import T7ee787java.util.ListTb4b4b4;

T8b949e/**
* Android BLE helper used by MeshChatX's Chaquopy able package.
* Context is injected from MainActivity instead of Kivy PythonActivity.
*
* Runtime BLUETOOTH_SCAN / BLUETOOTH_CONNECT checks gate every privileged call.
* SuppressLint covers lint's MissingPermission analysis, which does not always
* follow those helpers across API-level branches.
*/
Tf0883e@SuppressLintTb4b4b4(Ta5d6ff"Ta5d6ffMissingPermissionTa5d6ff"Tb4b4b4)
Tff7b72public Tff7b72class T56d364BLE Tb4b4b4{
Tff7b72private Tff7b72static Tff7b72final Te6edf3String Te6edf3TAG Tff7b72= Ta5d6ff"Ta5d6ffBLE-meshchatxTa5d6ff"Tb4b4b4;

Tff7b72public Tff7b72static Tff7b72volatile Te6edf3Context Te6edf3appContextTb4b4b4;

Tff7b72private Tff7b72final Te6edf3PythonBluetooth Te6edf3mPythonTb4b4b4;
Tff7b72private Tff7b72final Te6edf3Context Te6edf3mContextTb4b4b4;
Tff7b72private Te6edf3BluetoothAdapter Te6edf3mBluetoothAdapterTb4b4b4;
Tff7b72private Te6edf3BluetoothLeScanner Te6edf3mBluetoothLeScannerTb4b4b4;
Tff7b72private Te6edf3BluetoothGatt Te6edf3mBluetoothGattTb4b4b4;
Tff7b72private Te6edf3ListTff7b72<Te6edf3BluetoothGattServiceTff7b72> Te6edf3mBluetoothGattServicesTb4b4b4;
Tff7b72private Tffa657boolean Te6edf3mScanningTb4b4b4;

Tff7b72public Tff7b72static Tffa657void Td2a8ffsetAppContextTb4b4b4(Te6edf3Context Te6edf3contextTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3context Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3appContext Tff7b72= Te6edf3contextTb4b4b4.Te6edf3getApplicationContextTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72public Tffa657void Td2a8ffshowErrorTb4b4b4(Tff7b72final Te6edf3String Te6edf3msgTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_errorTb4b4b4(Te6edf3msgTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72public Td2a8ffBLETb4b4b4(Te6edf3PythonBluetooth Te6edf3pythonTb4b4b4) Tb4b4b4{
Te6edf3mPython Tff7b72= Te6edf3pythonTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3appContext Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Te6edf3IllegalStateExceptionTb4b4b4(
Ta5d6ff"Ta5d6fforg.able.BLE.appContext is not set. Call BLE.setAppContext from MainActivity.Ta5d6ff"
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3mContext Tff7b72= Te6edf3appContextTb4b4b4;
Te6edf3mBluetoothGatt Tff7b72= Tff7b72nullTb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mContextTb4b4b4.Te6edf3getPackageManagerTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3hasSystemFeatureTb4b4b4(Te6edf3PackageManagerTb4b4b4.Te6edf3FEATURE_BLUETOOTH_LETb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffDevice does not support Bluetooth Low Energy.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}

Tff7b72final Te6edf3BluetoothManager Te6edf3bluetoothManager Tff7b72=
Tb4b4b4(Te6edf3BluetoothManagerTb4b4b4) Te6edf3mContextTb4b4b4.Te6edf3getSystemServiceTb4b4b4(Te6edf3ContextTb4b4b4.Te6edf3BLUETOOTH_SERVICETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3bluetoothManager Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3mBluetoothAdapter Tff7b72= Te6edf3bluetoothManagerTb4b4b4.Te6edf3getAdapterTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3mContextTb4b4b4.Te6edf3registerReceiverTb4b4b4(
Te6edf3mReceiverTb4b4b4,
Tff7b72new Te6edf3IntentFilterTb4b4b4(Te6edf3BluetoothAdapterTb4b4b4.Te6edf3ACTION_STATE_CHANGEDTb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72private Tffa657boolean Td2a8ffhasConnectPermissionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72< Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3STb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3mContextTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3BLUETOOTH_CONNECTTb4b4b4)
Tff7b72=Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4;
Tb4b4b4}

Tff7b72private Tffa657boolean Td2a8ffhasScanPermissionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72< Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3STb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3mContextTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3BLUETOOTH_SCANTb4b4b4)
Tff7b72=Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4;
Tb4b4b4}

Tff7b72public Te6edf3BluetoothAdapter Td2a8ffgetAdapterTb4b4b4(Tffa657int Te6edf3enableBtCodeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3mBluetoothAdapter Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffDevice does not support Bluetooth Low Energy.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hasConnectPermissionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mBluetoothAdapterTb4b4b4.Te6edf3isEnabledTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBLE adapter is not enabledTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3SecurityException Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3mBluetoothAdapterTb4b4b4;
Tb4b4b4}

Tff7b72public Te6edf3BluetoothAdapter Td2a8ffgetMBluetoothAdapterTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3mBluetoothAdapterTb4b4b4;
Tb4b4b4}

Tff7b72public Te6edf3BluetoothGatt Td2a8ffgetGattTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3mBluetoothGattTb4b4b4;
Tb4b4b4}

Tff7b72public Tffa657void Td2a8ffstartScanTb4b4b4(Tffa657int Te6edf3enableBtCodeTb4b4b4, Te6edf3ListTff7b72<Te6edf3ScanFilterTff7b72> Te6edf3filtersTb4b4b4, Te6edf3ScanSettings Te6edf3settingsTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffstartScanTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hasScanPermissionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth scan permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_scan_startedTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3BluetoothAdapter Te6edf3adapter Tff7b72= Te6edf3getAdapterTb4b4b4(Te6edf3enableBtCodeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3adapter Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3mBluetoothLeScanner Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3mBluetoothLeScanner Tff7b72= Te6edf3adapterTb4b4b4.Te6edf3getBluetoothLeScannerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3mBluetoothLeScanner Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3mScanning Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3mBluetoothLeScannerTb4b4b4.Te6edf3startScanTb4b4b4(Te6edf3filtersTb4b4b4, Te6edf3settingsTb4b4b4, Te6edf3mScanCallbackTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not get BLE Scanner object.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_scan_startedTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3SecurityException Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth scan permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_scan_startedTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72public Tffa657void Td2a8ffstopScanTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3mBluetoothLeScanner Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hasScanPermissionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth scan permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffstopScanTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3mBluetoothLeScannerTb4b4b4.Te6edf3stopScanTb4b4b4(Te6edf3mScanCallbackTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3mScanningTb4b4b4) Tb4b4b4{
Te6edf3mScanning Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_scan_completedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3SecurityException Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth scan permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72final Te6edf3ScanCallback Te6edf3mScanCallback Tff7b72= Tff7b72new Te6edf3ScanCallbackTb4b4b4(Tb4b4b4) Tb4b4b4{
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonScanResultTb4b4b4(Tff7b72final Tffa657int Te6edf3callbackTypeTb4b4b4, Tff7b72final Te6edf3ScanResult Te6edf3resultTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mScanningTb4b4b4) Tb4b4b4{
Te6edf3mScanning Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffBLE scan started successfullyTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_scan_startedTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3mPythonTb4b4b4.Te6edf3on_scan_resultTb4b4b4(Te6edf3resultTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonBatchScanResultsTb4b4b4(Te6edf3ListTff7b72<Te6edf3ScanResultTff7b72> Te6edf3resultsTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffonBatchScanResultsTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonScanFailedTb4b4b4(Tffa657int Te6edf3errorCodeTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffBLE Scan failed, error code:Ta5d6ff" Tff7b72+ Te6edf3errorCodeTb4b4b4)Tb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_scan_startedTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;

Tff7b72public Tffa657void Td2a8ffconnectGattTb4b4b4(Te6edf3BluetoothDevice Te6edf3deviceTb4b4b4) Tb4b4b4{
Te6edf3connectGattTb4b4b4(Te6edf3deviceTb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72public Tffa657void Td2a8ffconnectGattTb4b4b4(Te6edf3BluetoothDevice Te6edf3deviceTb4b4b4, Tffa657boolean Te6edf3autoConnectTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffconnectGattTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hasConnectPermissionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3mBluetoothGatt Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3mBluetoothGatt Tff7b72= Te6edf3deviceTb4b4b4.Te6edf3connectGattTb4b4b4(
Te6edf3mContextTb4b4b4,
Te6edf3autoConnectTb4b4b4,
Te6edf3mGattCallbackTb4b4b4,
Te6edf3BluetoothDeviceTb4b4b4.Te6edf3TRANSPORT_LE
Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3SecurityException Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffBluetoothGatt exists, call closeGatt() before reconnectingTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72public Tffa657void Td2a8ffcloseGattTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffcloseGattTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3mBluetoothGatt Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hasConnectPermissionTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3mBluetoothGattTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3mBluetoothGatt Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3SecurityException Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72final Te6edf3BroadcastReceiver Te6edf3mReceiver Tff7b72= Tff7b72new Te6edf3BroadcastReceiverTb4b4b4(Tb4b4b4) Tb4b4b4{
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonReceiveTb4b4b4(Te6edf3Context Te6edf3contextTb4b4b4, Te6edf3Intent Te6edf3intentTb4b4b4) Tb4b4b4{
Te6edf3String Te6edf3action Tff7b72= Te6edf3intentTb4b4b4.Te6edf3getActionTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3BluetoothAdapterTb4b4b4.Te6edf3ACTION_STATE_CHANGEDTb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3actionTb4b4b4)Tb4b4b4) Tb4b4b4{
Tffa657int Te6edf3state Tff7b72= Te6edf3intentTb4b4b4.Te6edf3getIntExtraTb4b4b4(Te6edf3BluetoothAdapterTb4b4b4.Te6edf3EXTRA_STATETb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_bluetooth_adapter_state_changeTb4b4b4(Te6edf3stateTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4;

Tff7b72private Tff7b72final Te6edf3BluetoothGattCallback Te6edf3mGattCallback Tff7b72= Tff7b72new Te6edf3BluetoothGattCallbackTb4b4b4(Tb4b4b4) Tb4b4b4{
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonConnectionStateChangeTb4b4b4(Te6edf3BluetoothGatt Te6edf3gattTb4b4b4, Tffa657int Te6edf3statusTb4b4b4, Tffa657int Te6edf3newStateTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3newState Tff7b72=Tff7b72= Te6edf3BluetoothProfileTb4b4b4.Te6edf3STATE_CONNECTEDTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffConnected to GATT server, status:Ta5d6ff" Tff7b72+ Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3newState Tff7b72=Tff7b72= Te6edf3BluetoothProfileTb4b4b4.Te6edf3STATE_DISCONNECTEDTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffDisconnected from GATT server, status:Ta5d6ff" Tff7b72+ Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3mBluetoothGatt Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3mBluetoothGatt Tff7b72= Te6edf3gattTb4b4b4;
Tb4b4b4}
Te6edf3mPythonTb4b4b4.Te6edf3on_connection_state_changeTb4b4b4(Te6edf3statusTb4b4b4, Te6edf3newStateTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonServicesDiscoveredTb4b4b4(Te6edf3BluetoothGatt Te6edf3gattTb4b4b4, Tffa657int Te6edf3statusTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3status Tff7b72=Tff7b72= Te6edf3BluetoothGattTb4b4b4.Te6edf3GATT_SUCCESSTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffonServicesDiscovered - successTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3mBluetoothGattServices Tff7b72= Te6edf3mBluetoothGattTb4b4b4.Te6edf3getServicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffonServicesDiscovered status:Ta5d6ff" Tff7b72+ Te6edf3statusTb4b4b4)Tb4b4b4;
Te6edf3mBluetoothGattServices Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3mPythonTb4b4b4.Te6edf3on_servicesTb4b4b4(Te6edf3statusTb4b4b4, Te6edf3mBluetoothGattServicesTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonCharacteristicChangedTb4b4b4(
Te6edf3BluetoothGatt Te6edf3gattTb4b4b4,
Te6edf3BluetoothGattCharacteristic Te6edf3characteristic
Tb4b4b4) Tb4b4b4{
Te6edf3mPythonTb4b4b4.Te6edf3on_characteristic_changedTb4b4b4(Te6edf3characteristicTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonCharacteristicReadTb4b4b4(
Te6edf3BluetoothGatt Te6edf3gattTb4b4b4,
Te6edf3BluetoothGattCharacteristic Te6edf3characteristicTb4b4b4,
Tffa657int Te6edf3status
Tb4b4b4) Tb4b4b4{
Te6edf3mPythonTb4b4b4.Te6edf3on_characteristic_readTb4b4b4(Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonCharacteristicWriteTb4b4b4(
Te6edf3BluetoothGatt Te6edf3gattTb4b4b4,
Te6edf3BluetoothGattCharacteristic Te6edf3characteristicTb4b4b4,
Tffa657int Te6edf3status
Tb4b4b4) Tb4b4b4{
Te6edf3mPythonTb4b4b4.Te6edf3on_characteristic_writeTb4b4b4(Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonDescriptorReadTb4b4b4(
Te6edf3BluetoothGatt Te6edf3gattTb4b4b4,
Te6edf3BluetoothGattDescriptor Te6edf3descriptorTb4b4b4,
Tffa657int Te6edf3status
Tb4b4b4) Tb4b4b4{
Te6edf3mPythonTb4b4b4.Te6edf3on_descriptor_readTb4b4b4(Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonDescriptorWriteTb4b4b4(
Te6edf3BluetoothGatt Te6edf3gattTb4b4b4,
Te6edf3BluetoothGattDescriptor Te6edf3descriptorTb4b4b4,
Tffa657int Te6edf3status
Tb4b4b4) Tb4b4b4{
Te6edf3mPythonTb4b4b4.Te6edf3on_descriptor_writeTb4b4b4(Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonReadRemoteRssiTb4b4b4(Te6edf3BluetoothGatt Te6edf3gattTb4b4b4, Tffa657int Te6edf3rssiTb4b4b4, Tffa657int Te6edf3statusTb4b4b4) Tb4b4b4{
Te6edf3mPythonTb4b4b4.Te6edf3on_rssi_updatedTb4b4b4(Te6edf3rssiTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonMtuChangedTb4b4b4(Te6edf3BluetoothGatt Te6edf3gattTb4b4b4, Tffa657int Te6edf3mtuTb4b4b4, Tffa657int Te6edf3statusTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Te6edf3StringTb4b4b4.Te6edf3formatTb4b4b4(Ta5d6ff"Ta5d6ffonMtuChanged mtu=%d status=%dTa5d6ff"Tb4b4b4, Te6edf3mtuTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3mPythonTb4b4b4.Te6edf3on_mtu_changedTb4b4b4(Te6edf3mtuTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;

Tff7b72public Tffa657boolean Td2a8ffwriteCharacteristicTb4b4b4(
Te6edf3BluetoothGattCharacteristic Te6edf3characteristicTb4b4b4,
Tffa657byteTff7b72[Tff7b72] Te6edf3dataTb4b4b4,
Tffa657int Te6edf3writeType
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hasConnectPermissionTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72| Te6edf3mBluetoothGatt Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3characteristicTb4b4b4.Te6edf3setValueTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3writeType Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3characteristicTb4b4b4.Te6edf3setWriteTypeTb4b4b4(Te6edf3writeTypeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72return Te6edf3mBluetoothGattTb4b4b4.Te6edf3writeCharacteristicTb4b4b4(Te6edf3characteristicTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3SecurityException Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72public Tffa657boolean Td2a8ffreadCharacteristicTb4b4b4(Te6edf3BluetoothGattCharacteristic Te6edf3characteristicTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hasConnectPermissionTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72| Te6edf3mBluetoothGatt Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72return Te6edf3mBluetoothGattTb4b4b4.Te6edf3readCharacteristicTb4b4b4(Te6edf3characteristicTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3SecurityException Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72public Tffa657boolean Td2a8ffreadRemoteRssiTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3hasConnectPermissionTb4b4b4(Tb4b4b4) Tff7b72|Tff7b72| Te6edf3mBluetoothGatt Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72return Te6edf3mBluetoothGattTb4b4b4.Te6edf3readRemoteRssiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3SecurityException Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3showErrorTb4b4b4(Ta5d6ff"Ta5d6ffBluetooth connect permission is not granted.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────